// 这道题, 用了一个特别的算法, 也就是在遍历的每个截止时间前, 看人物队列中是否有任务, 有的话, 就干一条,
// 每次新的截止时间进来, 都需要判断原队列中, 是否有可以做的任务, 加入优先队列;   然后吧优先队列中过期的任务都删掉
// 然后按照结束时间排序, 先消化掉结束时间早的
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let n;
let initArr = [];
rl.on("line", (line)=>{
    if(n === undefined) {
        n = Number(line.trim())
    } else{
        initArr.push(line.trim().split(" ").map(Number))
        if(initArr.length === n) {
            console.log(getResult(n, initArr))

            // clear
            n = undefined
            initArr.length = 0
        }


    }

})

function getResult(n, initArr) {
    let min = 0
    let max = 0
    for (const [s, e] of initArr) {
        min = Math.min(min, s)
        max = Math.max(max, e)
    }

    // 开始时间升序
    initArr.sort((a, b)=> a[0] - b[0])
    let ans = 0
    let pq = []; // 当前可以处理的任务
    for (let i = min; i <= max ; i++) {
        // 推截止时间前的任务
        while (initArr.length && initArr[0][0] <= i) {
            pq.push(initArr.shift())
        }
        // 过滤过期任务
        pq.sort((a, b) => a[1] -b[1]) // 结束时间升序
        while(pq.length && pq[0][1] < i) {
            pq.shift()
        }

        if(pq.length) {
            pq.shift()
            ans++
        }
    }

    return ans

}